// Package _range after_range
// @Title _range
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/2 12:05
// @Create  2021/9/2 12:05
package _range

import "go_leetcode/special_practice/3_tree"

// AfterRange 使用两个栈实现后序遍历二叉树
func AfterRange(root *__tree.MyTreeNode) []int {
	ans := make([]int, 0)
	if root == nil {
		return ans
	}
	stack := []*__tree.MyTreeNode{root} // 头结点入栈
	for len(stack) > 0 {
		cur := stack[len(stack)-1]
		stack = stack[:len(stack)-1] // 弹出栈的一个元素
		ans = append(ans, cur.Val)   // 放入收集栈中
		if cur.Left != nil {
			stack = append(stack, cur.Left)
		}
		if cur.Right != nil {
			stack = append(stack, cur.Right)
		}
	}
	// 将数组反转即可
	for i := 0; i < len(ans)/2; i++ {
		ans[len(ans)-1-i], ans[i] = ans[i], ans[len(ans)-1-i]
	}
	return ans
}
